/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.tools.idea.sqlite.utils

import java.io.FileInputStream
import java.io.FileOutputStream
import java.nio.file.Path
import java.util.Scanner
import java.util.zip.ZipInputStream

fun Path.toLines() =
  sequence {
      Scanner(toFile(), Charsets.UTF_8.name()).use { while (it.hasNextLine()) yield(it.nextLine()) }
    }
    .toList()

/** @return list of unzipped files */
fun Path.unzipTo(dstDirectory: Path): List<Path> = let { source ->
  sequence {
      FileInputStream(source.toFile()).use { fileInputStream ->
        ZipInputStream(fileInputStream).use { zipInputStream ->
          var current = zipInputStream.nextEntry
          while (current != null) {
            if (current.isDirectory) throw IllegalStateException("Not implemented")
            val outPath = dstDirectory.resolve(current.name)
            FileOutputStream(outPath.toFile()).use { outStream ->
              // convert to a buffered approach for larger files
              outStream.write(zipInputStream.readAllBytes())
            }
            yield(outPath)
            current = zipInputStream.nextEntry
          }
        }
      }
    }
    .toList()
}
